home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cgraphix / findwrld.c < prev    next >
Text File  |  1986-05-28  |  1KB  |  57 lines

  1. /* «RM120»«PL99999»«TS4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76» */
  2. #include    <stdio.h>
  3. #define    EXTERN    extern
  4. #include    <typedef.h>
  5.  
  6.  
  7. void FindWorld(i,A,NPoints,ScaleX,ScaleY)
  8. int        i, NPoints;
  9. double    *A, ScaleX, ScaleY;
  10. {
  11.     extern double fabs();
  12.  
  13.     double    XMax,YMax,XMin,YMin;
  14.     int        k;
  15.     double    xmid, ymid, xdiff, ydiff;
  16.  
  17.     NPoints = iabs(NPoints);
  18.     if (NPoints < 2) {
  19.         error(7,4);
  20.         return;
  21.     }
  22.  
  23.     if (!((1 <= i) && (i <= MaxWorldsGlb))) {
  24.         error(7,2);
  25.         return;
  26.     }
  27.  
  28.     XMax = A[0];
  29.     YMax = A[1];
  30.     XMin = XMax;
  31.     YMin = YMax;
  32.     for (k = 2; k < 2 * NPoints; k++) {        /* NB. k incremented in code    */
  33.         if (A[k] > XMax)
  34.             XMax = A[k];
  35.         else if (A[k] < XMin)
  36.             XMin = A[k];
  37.         if (A[++k] > YMax)
  38.             YMax = A[k];
  39.         else if (A[k] < YMin)
  40.             YMin = A[k];
  41.     }
  42.     ScaleX = fabs(ScaleX);
  43.     ScaleY = fabs(ScaleY);
  44.     xdiff = XMax - XMin;
  45.     xmid = .5 * (XMin + XMax);
  46.     XMax = xmid + ScaleX * .5 * xdiff;
  47.     XMin = xmid - ScaleX * .5 * xdiff;
  48.     ydiff = YMax - YMin;
  49.     ymid = .5 * (YMin + YMax);
  50.     YMax = ymid + ScaleY * .5 * ydiff;
  51.     YMin = ymid - ScaleY * .5 * ydiff;
  52.     DefineWorld(i,XMin,YMin,XMax,YMax);
  53.     SelectWorld(i);
  54. }
  55.  
  56.  
  57.